var Schema = (function() {
	var instance = {};

	var types = (function () {
		var instance = {};
		function WsdlObject(_name, _type, _value) {
			var name = _name;
			var type = _type;
			var value = _value;
			var attr = new Array();
			var elementsArray = new Array();

			this.getName = getName;
			this.getType = getType;
			this.getValue = getValue;
			this.getAttr = getAttr;
			this.setName = setName;
			this.setType = setType;
			this.setValue = setValue;
			this.setAttr = setAttr;
			this.addElement = addElement;

			this.getAAttr = getAAttr;
			this.setAAttr = setAAttr;
			this.newAttr = newAttr;

			function getName() {
				return name;
			}

			function getType() {
				return type;
			}

			function getValue() {
				return value;
			}

			function getAttr() {
				return attr;
			}

			function setName(_name) {
				name = _name;
			}

			function setType(_type) {   
				type = _type;
			}

			function setValue(_value) {   
				value = _value;
			}

			function setAttr(_attr) {
				attr = _attr;
			}

			function addElement(_obj) {
				elementsArray.push(_obj);
			}

			function getAAttr(_name, _pos) {
				if (_pos == undefined) _pos = 0;
				if (_pos > attr.length) throw new Error (500, "Tentativa de recuperar uma posi��o inexistente");
				if (_pos == attr.length) {
					this.newAttr();
				}
				for (var p in attr[_pos]) {
					if (_name == attr[_pos][p].getName()) {
						return attr[_pos][p];
					}
				}
			}

			function setAAttr(_attr, _name, _pos) {
				if (_pos == undefined) _pos = 0;
				if (_pos > attr.length) throw new Error (500, "Tentativa de fazer uma atribui��o fora da ordem.");
				if (_pos == attr.length) {
					this.newAttr();
				}
				for (var p in attr[_pos]) {
					if (_name == attr[_pos][p].getName()) {
						attr[_pos][p] = _attr;
					}
				}
			}

			function newAttr() {
				var i = attr.length;
				attr[i] = new Array();
				for (var p in elementArray) {
					attr[i].push(p);
				}
			}
		}
		instance.WsdlObject = WsdlObject;

		instance.ArrayOftCountrySelectedTopScorer = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.tCountrySelectedTopScorer("tCountrySelectedTopScorer"));
			return instance;
		}

		instance.tGroupInfo = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.string("sCode"));
			instance.addElement(new types.string("sDescription"));
			return instance;
		}

		instance.tFullTeamInfo = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.string("sName"));
			instance.addElement(new types.string("sCountryFlag"));
			instance.addElement(new types.string("sCoach"));
			instance.addElement(new types.int("iCompeted"));
			instance.addElement(new types.ArrayOfString("sGoalKeepers"));
			instance.addElement(new types.ArrayOfString("sDefenders"));
			instance.addElement(new types.ArrayOfString("sMidFields"));
			instance.addElement(new types.ArrayOfString("sForwards"));
			return instance;
		}

		instance.ArrayOftTopGoalScorer = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.tTopGoalScorer("tTopGoalScorer"));
			return instance;
		}

		instance.tCards = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.int("iYellow"));
			instance.addElement(new types.int("iRed"));
			return instance;
		}

		instance.ArrayOftTeamInfo = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.tTeamInfo("tTeamInfo"));
			return instance;
		}

		instance.ArrayOftCardInfo = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.tCardInfo("tCardInfo"));
			return instance;
		}

		instance.ArrayOftCoaches = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.tCoaches("tCoaches"));
			return instance;
		}

		instance.tCountryInfo = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.int("iId"));
			instance.addElement(new types.string("sName"));
			instance.addElement(new types.string("sIsoCode"));
			instance.addElement(new types.int("iPersons"));
			return instance;
		}

		instance.ArrayOfString = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.string("string"));
			return instance;
		}

		instance.tPlayersWithCards = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.string("sName"));
			instance.addElement(new types.int("iYellowCards"));
			instance.addElement(new types.int("iRedCards"));
			instance.addElement(new types.string("sTeamName"));
			instance.addElement(new types.string("sTeamFlag"));
			return instance;
		}

		instance.ArrayOftGroupInfo = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.tGroupInfo("tGroupInfo"));
			return instance;
		}

		instance.tTopSelectedGoalScorer = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.string("sName"));
			instance.addElement(new types.int("iSelected"));
			instance.addElement(new types.ArrayOftCountrySelectedTopScorer("Countries"));
			return instance;
		}

		instance.tGoal = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.date("dGame"));
			instance.addElement(new types.int("iMinute"));
			instance.addElement(new types.string("sPlayerName"));
			instance.addElement(new types.string("sTeamName"));
			instance.addElement(new types.string("sTeamFlag"));
			return instance;
		}

		instance.ArrayOftPlayerNames = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.tPlayerNames("tPlayerNames"));
			return instance;
		}

		instance.tTournamentInfo = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.date("dFirstGame"));
			instance.addElement(new types.date("dLastGame"));
			instance.addElement(new types.date("dLastGroupDateGame"));
			instance.addElement(new types.int("iGames"));
			return instance;
		}

		instance.ArrayOftTopSelectedGoalScorer = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.tTopSelectedGoalScorer("tTopSelectedGoalScorer"));
			return instance;
		}

		instance.ArrayOftCountryInfo = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.tCountryInfo("tCountryInfo"));
			return instance;
		}

		instance.ArrayOftGameCard = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.tGameCard("tGameCard"));
			return instance;
		}

		instance.tGameInfo = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.int("iId"));
			instance.addElement(new types.string("sDescription"));
			instance.addElement(new types.date("dPlayDate"));
			instance.addElement(new types.time("tPlayTime"));
			instance.addElement(new types.tStadiumInfo("StadiumInfo"));
			instance.addElement(new types.tTeamInfo("Team1"));
			instance.addElement(new types.tTeamInfo("Team2"));
			instance.addElement(new types.string("sResult"));
			instance.addElement(new types.string("sScore"));
			instance.addElement(new types.int("iYellowCards"));
			instance.addElement(new types.int("iRedCards"));
			instance.addElement(new types.ArrayOftGameCard("Cards"));
			instance.addElement(new types.ArrayOftGoal("Goals"));
			return instance;
		}

		instance.ArrayOftGoal = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.tGoal("tGoal"));
			return instance;
		}

		instance.ArrayOftStadiumInfo = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.tStadiumInfo("tStadiumInfo"));
			return instance;
		}

		instance.tGameCard = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.date("dGame"));
			instance.addElement(new types.int("iMinute"));
			instance.addElement(new types.string("sPlayerName"));
			instance.addElement(new types.boolean("bYellowCard"));
			instance.addElement(new types.boolean("bRedCard"));
			instance.addElement(new types.string("sTeamName"));
			instance.addElement(new types.string("sTeamFlag"));
			return instance;
		}

		instance.tTopGoalScorer = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.string("sName"));
			instance.addElement(new types.int("iGoals"));
			instance.addElement(new types.string("sCountry"));
			instance.addElement(new types.string("sFlag"));
			return instance;
		}

		instance.ArrayOftGameInfo = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.tGameInfo("tGameInfo"));
			return instance;
		}

		instance.tStadiumInfo = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.string("sStadiumName"));
			instance.addElement(new types.int("iSeatsCapacity"));
			instance.addElement(new types.string("sCityName"));
			instance.addElement(new types.string("sWikipediaURL"));
			instance.addElement(new types.string("sGoogleMapsURL"));
			return instance;
		}

		instance.tCoaches = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.string("sName"));
			instance.addElement(new types.tTeamInfo("TeamInfo"));
			return instance;
		}

		instance.tCardInfo = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.date("dGame"));
			instance.addElement(new types.int("iMinute"));
			instance.addElement(new types.string("sGameTeam1"));
			instance.addElement(new types.string("sGameTeam2"));
			instance.addElement(new types.string("sPlayerName"));
			instance.addElement(new types.boolean("bYellowCard"));
			instance.addElement(new types.boolean("bRedCard"));
			instance.addElement(new types.string("sGameTeam1Flag"));
			instance.addElement(new types.string("sGameTeam2Flag"));
			instance.addElement(new types.string("sPlayerFlag"));
			return instance;
		}

		instance.tCountrySelectedTopScorer = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.string("sName"));
			instance.addElement(new types.int("iCount"));
			return instance;
		}

		instance.ArrayOftGameResultCode = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.tGameResultCode("tGameResultCode"));
			return instance;
		}

		instance.tTeamInfo = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.int("iId"));
			instance.addElement(new types.string("sName"));
			instance.addElement(new types.string("sCountryFlag"));
			instance.addElement(new types.string("sWikipediaURL"));
			return instance;
		}

		instance.ArrayOftGroupsCompetitors = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.tGroupsCompetitors("tGroupsCompetitors"));
			return instance;
		}

		instance.tGameResultCode = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.string("sCode"));
			instance.addElement(new types.string("sDescription"));
			return instance;
		}

		instance.ArrayOftTeamCompete = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.tTeamCompete("tTeamCompete"));
			return instance;
		}

		instance.tTeamCompete = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.int("iCompeted"));
			instance.addElement(new types.int("iWon"));
			instance.addElement(new types.tCoaches("CoachInfo"));
			return instance;
		}

		instance.ArrayOftPlayersWithCards = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.tPlayersWithCards("tPlayersWithCards"));
			return instance;
		}

		instance.tGroupsCompetitors = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.tGroupInfo("GroupInfo"));
			instance.addElement(new types.ArrayOftTeamInfo("TeamsInGroup"));
			return instance;
		}

		instance.tPlayerNames = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Complex",undefined);
			instance.addElement(new types.int("iId"));
			instance.addElement(new types.string("sName"));
			instance.addElement(new types.string("sCountryName"));
			instance.addElement(new types.string("sCountryFlag"));
			return instance;
		}

		instance.ENTITIES = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.language = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.unsignedByte = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.IDREFS = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.int = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.double = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.normalizedString = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.byte = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.gMonthDay = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.base64Binary = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.time = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.ENTITY = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.ID = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.boolean = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.NOTATION = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.nonPositiveInteger = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.NCName = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.anyURI = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.gDay = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.float = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.long = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.nonNegativeInteger = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.string = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.IDREF = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.positiveInteger = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.Name = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.duration = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.unsignedLong = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.integer = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.negativeInteger = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.unsignedInt = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.decimal = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.token = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.hexBinary = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.short = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.gYear = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.gMonth = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.dateTime = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.QName = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.NMTOKENS = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.gYearMonth = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.NMTOKEN = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.date = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		instance.unsignedShort = function(_name) {
			var instance = {};
			instance.inheritFrom = types.WsdlObject;
			instance.inheritFrom(_name, "Simple",undefined);
			return instance;
		}

		return instance;
	})();

	instance.inheritFrom = types.WsdlObject;
	instance.inheritFrom("schema","Complex",undefined);

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("TeamsResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftTeamInfo("TeamsResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("GroupCompetitorsResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftTeamInfo("GroupCompetitorsResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("NumberOfGamesResponse", "Complex",undefined);
		instance.addElement(new types.int("NumberOfGamesResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("CountryNamesResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftCountryInfo("CountryNamesResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("TeamsCompeteList", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllGamesResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftGameInfo("AllGamesResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("DateOfLastGame", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllMidFieldsResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOfString("AllMidFieldsResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("StadiumInfo", "Complex",undefined);
		instance.addElement(new types.string("sStadiumName"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("Coaches", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("RedCardsTotal", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("YellowCardsTotal", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("TopSelectedGoalScorersResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftTopSelectedGoalScorer("TopSelectedGoalScorersResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("TournamentInfoResponse", "Complex",undefined);
		instance.addElement(new types.tTournamentInfo("TournamentInfoResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllStadiumInfo", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("CoachesResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftCoaches("CoachesResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllDefenders", "Complex",undefined);
		instance.addElement(new types.string("sCountryName"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("TopSelectedGoalScorers", "Complex",undefined);
		instance.addElement(new types.int("iTopN"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("FullTeamInfoResponse", "Complex",undefined);
		instance.addElement(new types.tFullTeamInfo("FullTeamInfoResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("TopGoalScorersResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftTopGoalScorer("TopGoalScorersResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("YellowAndRedCardsTotal", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("StadiumURL", "Complex",undefined);
		instance.addElement(new types.string("sStadiumName"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllPlayersWithYellowCards", "Complex",undefined);
		instance.addElement(new types.boolean("bSortedByName"));
		instance.addElement(new types.boolean("bSortedByYellowCards"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("GroupCompetitors", "Complex",undefined);
		instance.addElement(new types.string("sPoule"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("StadiumNames", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("GamesPerCityResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftGameInfo("GamesPerCityResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("TopGoalScorers", "Complex",undefined);
		instance.addElement(new types.int("iTopN"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllGroupCompetitorsResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftGroupsCompetitors("AllGroupCompetitorsResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("RedCardsTotalResponse", "Complex",undefined);
		instance.addElement(new types.int("RedCardsTotalResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllGoalKeepersResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOfString("AllGoalKeepersResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("TournamentInfo", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("DateOfFirstGame", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllPlayersWithYellowOrRedCards", "Complex",undefined);
		instance.addElement(new types.boolean("bSortedByName"));
		instance.addElement(new types.boolean("bSortedByYellowCards"));
		instance.addElement(new types.boolean("bSortedByRedCards"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("DateOfLastGameResponse", "Complex",undefined);
		instance.addElement(new types.date("DateOfLastGameResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllGames", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("NextGameResponse", "Complex",undefined);
		instance.addElement(new types.tGameInfo("NextGameResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("GamesPlayedResponse", "Complex",undefined);
		instance.addElement(new types.int("GamesPlayedResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("GroupsResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftGroupInfo("GroupsResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllForwardsResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOfString("AllForwardsResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllGroupCompetitors", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllGoalKeepers", "Complex",undefined);
		instance.addElement(new types.string("sCountryName"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("StadiumURLResponse", "Complex",undefined);
		instance.addElement(new types.string("StadiumURLResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("DateLastGroupGame", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllStadiumInfoResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftStadiumInfo("AllStadiumInfoResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("StadiumInfoResponse", "Complex",undefined);
		instance.addElement(new types.tStadiumInfo("StadiumInfoResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("DateOfFirstGameResponse", "Complex",undefined);
		instance.addElement(new types.date("DateOfFirstGameResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("NumberOfGames", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("YellowCardsTotalResponse", "Complex",undefined);
		instance.addElement(new types.int("YellowCardsTotalResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllCardsResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftCardInfo("AllCardsResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("GoalsScoredResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftGoal("GoalsScoredResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllPlayerNamesResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftPlayerNames("AllPlayerNamesResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllPlayersWithYellowCardsResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftPlayersWithCards("AllPlayersWithYellowCardsResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("GroupCount", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllPlayersWithRedCards", "Complex",undefined);
		instance.addElement(new types.boolean("bSortedByName"));
		instance.addElement(new types.boolean("bSortedByRedCards"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllCards", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllMidFields", "Complex",undefined);
		instance.addElement(new types.string("sCountryName"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllPlayersWithYellowOrRedCardsResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftPlayersWithCards("AllPlayersWithYellowOrRedCardsResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("PlayedAtWorldCupResponse", "Complex",undefined);
		instance.addElement(new types.int("PlayedAtWorldCupResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("GroupCountResponse", "Complex",undefined);
		instance.addElement(new types.int("GroupCountResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("GameInfo", "Complex",undefined);
		instance.addElement(new types.int("iGameId"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("GameResultCodesResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftGameResultCode("GameResultCodesResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllDefendersResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOfString("AllDefendersResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("YellowAndRedCardsTotalResponse", "Complex",undefined);
		instance.addElement(new types.tCards("YellowAndRedCardsTotalResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllPlayerNames", "Complex",undefined);
		instance.addElement(new types.boolean("bSelected"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("TeamsCompeteListResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftTeamCompete("TeamsCompeteListResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllPlayersWithRedCardsResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOftPlayersWithCards("AllPlayersWithRedCardsResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("GoalsScored", "Complex",undefined);
		instance.addElement(new types.int("iGameId"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("PlayedAtWorldCup", "Complex",undefined);
		instance.addElement(new types.string("sTeamName"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("CitiesResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOfString("CitiesResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("Cities", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("FullTeamInfo", "Complex",undefined);
		instance.addElement(new types.string("sTeamName"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("AllForwards", "Complex",undefined);
		instance.addElement(new types.string("sCountryName"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("Groups", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("Teams", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("GameInfoResponse", "Complex",undefined);
		instance.addElement(new types.tGameInfo("GameInfoResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("GamesPlayed", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("CountryNames", "Complex",undefined);
		instance.addElement(new types.boolean("bWithCompetitors"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("GamesPerCity", "Complex",undefined);
		instance.addElement(new types.string("sCityName"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("StadiumNamesResponse", "Complex",undefined);
		instance.addElement(new types.ArrayOfString("StadiumNamesResult"));
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("NextGame", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("GameResultCodes", "Complex",undefined);
		return instance;
	});

	instance.addElement(new function() {
		var instance = {};
		instance.inheritFrom = types.WsdlObject;
		instance.inheritFrom("DateLastGroupGameResponse", "Complex",undefined);
		instance.addElement(new types.date("DateLastGroupGameResult"));
		return instance;
	});

	return instance;
})();


Info = {
	// namespace definition works on all services avaiable
	// "/definitions/@targetNamespace"
	namespace: "http://footballpool.dataaccess.eu",

	InfoSoap: {

		// Address for this specific service
		// "/definitions/service/port/soap:adress/@location" 
		address: "http://footballpool.dataaccess.eu/data/info.wso",

		soapVersion: "1.1",
		// We need to define which binding is associated with this service
		// "/definitions/service/port/@binding" == "/definitions/binding/@name"

		// An association between the binding chosen and a portType must be done to match the service operations 
		// "/definitions/binding/@type" == "/definitions/portType/@name"

		// We have to build a function for each operation inside the binding and the portType
		// 

		// The input and output parameters are located in each message defined at the operation tags input and output  
		// "/definitions/portType/operation/input/@message"
		// "/definitions/portType/operation/output/@message"
		// "/definitions/message/part/@name"

		// functionName:		"/definitions/binding/operation/@name"
		// body:				"/definitions/message/part/@name"
		// outMethod			"Input from the user"
		// operation: 			"/definitions/binding/operation/@name"
		// action:				"/definitions/binding/operation/soap:operation/@soapAction"
		// outParam:			"New object for the particular function"

		AllPlayerNames: function (body, outMethod) {
			var operation = "AllPlayerNames";
			var output = "AllPlayerNamesResponse";
			var action = "";
			var outParam = Schema.getAAttr("AllPlayerNamesResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		AllDefenders: function (body, outMethod) {
			var operation = "AllDefenders";
			var output = "AllDefendersResponse";
			var action = "";
			var outParam = Schema.getAAttr("AllDefendersResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		AllGoalKeepers: function (body, outMethod) {
			var operation = "AllGoalKeepers";
			var output = "AllGoalKeepersResponse";
			var action = "";
			var outParam = Schema.getAAttr("AllGoalKeepersResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		AllForwards: function (body, outMethod) {
			var operation = "AllForwards";
			var output = "AllForwardsResponse";
			var action = "";
			var outParam = Schema.getAAttr("AllForwardsResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		AllMidFields: function (body, outMethod) {
			var operation = "AllMidFields";
			var output = "AllMidFieldsResponse";
			var action = "";
			var outParam = Schema.getAAttr("AllMidFieldsResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		TopGoalScorers: function (body, outMethod) {
			var operation = "TopGoalScorers";
			var output = "TopGoalScorersResponse";
			var action = "";
			var outParam = Schema.getAAttr("TopGoalScorersResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		TopSelectedGoalScorers: function (body, outMethod) {
			var operation = "TopSelectedGoalScorers";
			var output = "TopSelectedGoalScorersResponse";
			var action = "";
			var outParam = Schema.getAAttr("TopSelectedGoalScorersResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		AllPlayersWithYellowOrRedCards: function (body, outMethod) {
			var operation = "AllPlayersWithYellowOrRedCards";
			var output = "AllPlayersWithYellowOrRedCardsResponse";
			var action = "";
			var outParam = Schema.getAAttr("AllPlayersWithYellowOrRedCardsResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		AllPlayersWithYellowCards: function (body, outMethod) {
			var operation = "AllPlayersWithYellowCards";
			var output = "AllPlayersWithYellowCardsResponse";
			var action = "";
			var outParam = Schema.getAAttr("AllPlayersWithYellowCardsResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		AllPlayersWithRedCards: function (body, outMethod) {
			var operation = "AllPlayersWithRedCards";
			var output = "AllPlayersWithRedCardsResponse";
			var action = "";
			var outParam = Schema.getAAttr("AllPlayersWithRedCardsResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		AllCards: function (body, outMethod) {
			var operation = "AllCards";
			var output = "AllCardsResponse";
			var action = "";
			var outParam = Schema.getAAttr("AllCardsResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		Cities: function (body, outMethod) {
			var operation = "Cities";
			var output = "CitiesResponse";
			var action = "";
			var outParam = Schema.getAAttr("CitiesResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		StadiumNames: function (body, outMethod) {
			var operation = "StadiumNames";
			var output = "StadiumNamesResponse";
			var action = "";
			var outParam = Schema.getAAttr("StadiumNamesResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		StadiumURL: function (body, outMethod) {
			var operation = "StadiumURL";
			var output = "StadiumURLResponse";
			var action = "";
			var outParam = Schema.getAAttr("StadiumURLResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		StadiumInfo: function (body, outMethod) {
			var operation = "StadiumInfo";
			var output = "StadiumInfoResponse";
			var action = "";
			var outParam = Schema.getAAttr("StadiumInfoResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		AllStadiumInfo: function (body, outMethod) {
			var operation = "AllStadiumInfo";
			var output = "AllStadiumInfoResponse";
			var action = "";
			var outParam = Schema.getAAttr("AllStadiumInfoResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		FullTeamInfo: function (body, outMethod) {
			var operation = "FullTeamInfo";
			var output = "FullTeamInfoResponse";
			var action = "";
			var outParam = Schema.getAAttr("FullTeamInfoResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		Teams: function (body, outMethod) {
			var operation = "Teams";
			var output = "TeamsResponse";
			var action = "";
			var outParam = Schema.getAAttr("TeamsResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		GroupCount: function (body, outMethod) {
			var operation = "GroupCount";
			var output = "GroupCountResponse";
			var action = "";
			var outParam = Schema.getAAttr("GroupCountResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		Groups: function (body, outMethod) {
			var operation = "Groups";
			var output = "GroupsResponse";
			var action = "";
			var outParam = Schema.getAAttr("GroupsResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		GroupCompetitors: function (body, outMethod) {
			var operation = "GroupCompetitors";
			var output = "GroupCompetitorsResponse";
			var action = "";
			var outParam = Schema.getAAttr("GroupCompetitorsResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		AllGroupCompetitors: function (body, outMethod) {
			var operation = "AllGroupCompetitors";
			var output = "AllGroupCompetitorsResponse";
			var action = "";
			var outParam = Schema.getAAttr("AllGroupCompetitorsResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		GoalsScored: function (body, outMethod) {
			var operation = "GoalsScored";
			var output = "GoalsScoredResponse";
			var action = "";
			var outParam = Schema.getAAttr("GoalsScoredResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		GameInfo: function (body, outMethod) {
			var operation = "GameInfo";
			var output = "GameInfoResponse";
			var action = "";
			var outParam = Schema.getAAttr("GameInfoResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		AllGames: function (body, outMethod) {
			var operation = "AllGames";
			var output = "AllGamesResponse";
			var action = "";
			var outParam = Schema.getAAttr("AllGamesResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		CountryNames: function (body, outMethod) {
			var operation = "CountryNames";
			var output = "CountryNamesResponse";
			var action = "";
			var outParam = Schema.getAAttr("CountryNamesResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		GamesPlayed: function (body, outMethod) {
			var operation = "GamesPlayed";
			var output = "GamesPlayedResponse";
			var action = "";
			var outParam = Schema.getAAttr("GamesPlayedResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		GamesPerCity: function (body, outMethod) {
			var operation = "GamesPerCity";
			var output = "GamesPerCityResponse";
			var action = "";
			var outParam = Schema.getAAttr("GamesPerCityResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		YellowCardsTotal: function (body, outMethod) {
			var operation = "YellowCardsTotal";
			var output = "YellowCardsTotalResponse";
			var action = "";
			var outParam = Schema.getAAttr("YellowCardsTotalResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		RedCardsTotal: function (body, outMethod) {
			var operation = "RedCardsTotal";
			var output = "RedCardsTotalResponse";
			var action = "";
			var outParam = Schema.getAAttr("RedCardsTotalResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		YellowAndRedCardsTotal: function (body, outMethod) {
			var operation = "YellowAndRedCardsTotal";
			var output = "YellowAndRedCardsTotalResponse";
			var action = "";
			var outParam = Schema.getAAttr("YellowAndRedCardsTotalResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		GameResultCodes: function (body, outMethod) {
			var operation = "GameResultCodes";
			var output = "GameResultCodesResponse";
			var action = "";
			var outParam = Schema.getAAttr("GameResultCodesResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		Coaches: function (body, outMethod) {
			var operation = "Coaches";
			var output = "CoachesResponse";
			var action = "";
			var outParam = Schema.getAAttr("CoachesResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		PlayedAtWorldCup: function (body, outMethod) {
			var operation = "PlayedAtWorldCup";
			var output = "PlayedAtWorldCupResponse";
			var action = "";
			var outParam = Schema.getAAttr("PlayedAtWorldCupResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		TeamsCompeteList: function (body, outMethod) {
			var operation = "TeamsCompeteList";
			var output = "TeamsCompeteListResponse";
			var action = "";
			var outParam = Schema.getAAttr("TeamsCompeteListResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		NextGame: function (body, outMethod) {
			var operation = "NextGame";
			var output = "NextGameResponse";
			var action = "";
			var outParam = Schema.getAAttr("NextGameResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		DateOfFirstGame: function (body, outMethod) {
			var operation = "DateOfFirstGame";
			var output = "DateOfFirstGameResponse";
			var action = "";
			var outParam = Schema.getAAttr("DateOfFirstGameResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		DateOfLastGame: function (body, outMethod) {
			var operation = "DateOfLastGame";
			var output = "DateOfLastGameResponse";
			var action = "";
			var outParam = Schema.getAAttr("DateOfLastGameResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		DateLastGroupGame: function (body, outMethod) {
			var operation = "DateLastGroupGame";
			var output = "DateLastGroupGameResponse";
			var action = "";
			var outParam = Schema.getAAttr("DateLastGroupGameResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		TournamentInfo: function (body, outMethod) {
			var operation = "TournamentInfo";
			var output = "TournamentInfoResponse";
			var action = "";
			var outParam = Schema.getAAttr("TournamentInfoResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

		NumberOfGames: function (body, outMethod) {
			var operation = "NumberOfGames";
			var output = "NumberOfGamesResponse";
			var action = "";
			var outParam = Schema.getAAttr("NumberOfGamesResponse");
			SOAPActions.call(Info.InfoSoap.address, operation, output, outMethod, Info.namespace, action, true, body, outParam, Info.InfoSoap.soapVersion);
		},

	},
}



SOAPActions = {

	// Inicializa a requisição diferenciando uma operação síncrona de uma assíncrona através do retorno
	call: function(location, operation, operationResponse, outMethod, namespace, soapaction, async, inParam, outParam, soapVersion) {
		if(async) {
			SOAPActions.chargeMessage (location, operation, operationResponse, outMethod, namespace, soapaction, async, inParam, outParam, soapVersion);
		} else {
			return SOAPActions.chargeMessage (location, operation, operationResponse, outMethod, namespace, soapaction, async, inParam, outParam, soapVersion);
		}
	},

	// Cria a mensagem, abrea conexão com o web service e envia a mensagem
	chargeMessage: function(location, operation, operationResponse, outMethod, namespace, soapaction, async, inParam, outParam, soapVersion) {
		if (soapVersion = "1.1") {
			var message =
			"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
			"<soap:Envelope " +
			"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
			"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " +
			"xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
			"<soap:Body>" +
			"<" + operation + " xmlns=\"" + namespace + "\">" +
			Utils.objectToXml(inParam) +
			"</" + operation + "></soap:Body></soap:Envelope>";
		} else if (soapVersion = "1.2") {
			var message =
			"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
			"<soap12:Envelope " +
			"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
			"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " +
			"xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">" +
			"<soap12:Body>" +
			"<" + operation + " xmlns=\"" + namespace + "\">" +
			Utils.objectToXml(inParam) +
			"</" + operation + "></soap12:Body></soap12:Envelope>";
		}
		else throw new Error (500, "Vers�o SOAP para a constru��o da mensagem n�o identificada");
		// Envia a requisição
		var xmlHttp = Utils.getXmlHttp(); 
		xmlHttp.open("POST", location, async);
		xmlHttp.setRequestHeader("SOAPAction", soapaction);
		xmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
		if(async) {
			xmlHttp.onreadystatechange = function() {
				if(xmlHttp.readyState == 4) {
					SOAPActions.chargedMessage(operation, operationResponse, outMethod, async, xmlHttp, outParam);
				}
			}
		}
		alert(message);
		xmlHttp.send(message);
		
		if (!async) {
			return SOAPActions.chargedMessage(operation, operationResponse, outMethod, async, xmlHttp, outParam);
		}
	},

	// Quando o readyState for ok (4), Trabalhamos em cima da resposta e chamamos o método OutMethod que foi definido pelo usu�rio
	chargedMessage: function(operation, operationResponse, outMethod, async, xmlHttp, outParam) {
		// Aloca a resposta SOAP em uma estrutura de Nó utilizando a API DOM.
		alert(xmlHttp.ResponseText);
		var ResponseNode = Utils.getNode(xmlHttp, operationResponse);
		//Converte a estrutura de Nó para a estrutura de dados de outParam (Objeto)
		outParam = Utils.nodeToObject(ResponseNode, outParam);
		// E retorna a resposta
		outMethod(outParam);
		if(!async) {
			return outParam;
		}
	}	
}


Utils = {

	// checa se o objeto é um Array
	isArray: function(object) {
		return object != null && typeof object == "object" && 'splice' in object && 'join' in object;
	},

	// verifica se o n� irm�o mais velho possui o mesmo nome do atual
	samePreviousSibling: function(node) {
		try {
			return (node.nodeName == node.previousSibling.nodeName);
		}
		catch (ex) {}
		return false;
	},

	// verifica se o n� irm�o mais novo possui o mesmo nome do atual
	sameNextSibling: function(node) {
		try {
			return (node.nodeName == node.nextSibling.nodeName);
		}
		catch (ex) {}
		return false;
	},

	// converte a estrutura de dados utilizada para tags XML
	objectToXml: function (obj) {
		xmlStr = "";
		for (var i in obj.getAttr()[0]) {
			xmlStr += Utils.buildTag (obj.getAttr()[0][i]);//t� feio
		}
		return xmlStr;
	},

	// fun��o que complementa a anterior
	buildTag: function (obj) {
		var strTag = "";
		if (obj.getType() == "Complex") {
			if (obj.getAttr().length > 0) {
				strTag += "<" + obj.getName() + ">";
				for (var p in obj.getAttr()) {
					for (var i in obj.getAttr()[p]) {
						strTag += Utils.buildTag (obj.getAttr()[p][i]);
					}
				}
				strTag += "</" + obj.getName() + ">";
			}
		} else {
			if (obj.getValue() != undefined) {
				strTag += "<" + obj.getName() + ">";
				strTag += obj.getValue().replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
				strTag += "</" + obj.getName() + ">";
			}
		}
		return strTag;
	},

	// Retorna o nome da Tag sem o Namespace (Nome local)
	getNodeLocalName: function (node) {
		return node.nodeName.substring(node.nodeName.indexOf(":") + 1);
	},

	//Retorna verdadeiro se o n� for folha
	isLeafNode: function(node) {
		return (node.childNodes.length == 1 && (node.childNodes[0].nodeType == 3 || node.childNodes[0].nodeType == 4));
	},

	// verifica qual � a posi��o do no atual em rela��o aos irm�os mais velhos de mesmo nome
	getSameNodesPosition: function(node) {
		var result = 0;
		while (Utils.samePreviousSibling(node)) {
			node = node.previousSibling;
			result++;
		}
		return result;
	},

	// Constr�i um objeto do tipo OutParam se baseando na �rvore de n�s
	nodeToObject: function(node, outParam) {
		if (node == null) {
			return null;
		}
		// Se o n� for do tipo texto, ent�o retorna seu valor final
		if (node.nodeType == 3 || node.nodeType == 4) {
			return Utils.getValue(node, outParam);
		}
		nodeLocalName = Utils.getNodeLocalName(node);
		// Apenas continua se o nodeName existir no objeto outParam, caso contr�rio ocorre um erro
		if (outParam.getName() == nodeLocalName) {
			// Se for um n� folha retorna o m�todo recursivamente chamando o n� filho para o mesmo outParam
			if (Utils.isLeafNode(node)) {
				return Utils.nodeToObject(node.childNodes[0], outParam);
			}
			for(var i = 0; i < node.childNodes.length; i++) { 
				var pos = Utils.getSameNodesPosition (node.childNodes[i]);
				var p = Utils.nodeToObject(node.childNodes[i], outParam.getAAttr(Utils.getNodeLocalName(node.childNodes[i]), pos));
				outParam.setAAttr(p, Utils.getNodeLocalName(node.childNodes[i]), pos);
			}
			return outParam;
		}
		throw new Error (500, "Erro na convers�o de n�s para objetos");
	},

	// Retorna um valor baseando-se no objeto que estaria destinado a receber o valor
	getValue: function(node, outParam) {
		var value = node.nodeValue;
		if (outParam.getType() == "Simple") {
			outParam.setValue(value);
			return outParam;
		} else if (outParam.getType() == "Complex") {
			throw new Error (500, "Não é possível retorna o valor de um ComplexType")
		}
	},

	// Retorna o n� que possui o local name passado por par�metro, caso exista mais de um os namespaces seriam necess�rios e ocasionar� em um erro, visto que o IE n�o trabalha com namespaces.
	getNodeByLocalName: function (nodeList, localName) {
		var qtd = 0;
		for (i=0; i < nodeList.length; i++) {
			if (nodeList[i].nodeName.substring(nodeList[i].nodeName.indexOf(":") + 1).match(localName)) {
				qtd = qtd + 1;
				node = nodeList[i];
			}
		}
		if (qtd < 1) throw new Error(500, "Tentativa de recuperar um n� inexistente.");
		if (qtd > 1) throw new Error(500, "Existe mais de um n� para este LocalName.");
		return node;
	},

	// Ajuda a construir uma estrutura de N� a partir da um xml. getElementsByTagName n�o funciona no IE6 e anteriores.
	getNode: function(xml, tag) {
		try {
			nodeList = xml.responseXML.selectNodes(".//*[local-name()=\""+ tag +"\"]"); // ser� que funciona? falta testar
			return Utils.getNodeByLocalName(nodeList, tag);
		}
		catch (ex) {}
		nodeList = xml.responseXML.getElementsByTagName('*');
		return Utils.getNodeByLocalName(nodeList, tag);
	},

	//Testa os parsers para uma compatibilidade com diversos browsers.
	getXmlHttp: function() { 
		try {
			if (window.XMLHttpRequest) {
				var req = new XMLHttpRequest();
				if (req.readyState == null) {
					req.readyState = 1;
					req.addEventListener("load", function() {
						req.readyState = 4;
						if (typeof req.onreadystatechange == "function") {
							req.onreadystatechange();
						}
					},
					false);
				}
				return req;
			}
			if (window.ActiveXObject) {
				var parsers = ["Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
				for(var i = 0; i < parsers.length; i++) {
					try {
						return new ActiveXObject(parsers[i]);
					}
					catch (ex) {};
				}
				throw new Error("Imposs�vel encontrar um Xml parser instalado");
			}
		}
		catch (ex) {}
		throw new Error("Este navegador n�o suporta objectos XmlHttp");
	}
}
